使用 MySQL Exporter 监控MySQL

87次阅读
没有评论

共计 2829 个字符,预计需要花费 8 分钟才能阅读完成。

背景

大约三年前,由于 mysql_exporter 原生并不支持多实例监控(即每个 MySQL 实例都需要启动一个新的 exporter 才能抓取到指标),当时需要自行编译源码实现,略为繁琐。再加上团队内有同事专职开发 telegraf 实现指标统一收集,于是用 telegraf 取代了 mysql_exporter。

查阅资料时,发现 mysql_exporter 已于2022年原生支持多实例监控,着手测试下相关能力。

实操

从0开始进行测试,不直接操作线上环境。

software IP port
MySQL 5.7 192.168.2.11 3007
MySQL 8.0 192.168.2.11 3008
mysql_exporter 0.16.0 192.168.2.10 9104
Prometheus 192.168.2.10 9090

部署MySQL

使用最简单的 docker 部署方式,部署两个 MySQL实例,版本分别为 5.7 & 8.0

# 创建数据目录
cd /usr/local/test/
mkdir ./mysql/mysql57/data -p
mkdir ./mysql/mysql80/data -p

# 创建启动脚本
# vim run-mysql57.sh
docker run -d \
--name mysql57 \
-p 3307:3306 \
-e MYSQL_ROOT_PASSWORD=root123passwd \
-v /usr/local/test/mysql-docker/mysql/mysql57/data:/var/lib/mysql \
mysql:5.7

# vim run-mysql80.sh
docker run -d \
--name mysql80 \
-p 3308:3306 \
-e MYSQL_ROOT_PASSWORD=root123passwd \
-v /usr/local/test/mysql-docker/mysql/mysql80/data:/var/lib/mysql \
mysql:8.0

# 启动 mysql 容器
bash run-mysql57.sh
bash run-mysql80.sh

# MySQL 5.7 添加监控用户
mysql -h127.0.0.1 -P3307 -uroot -proot123passwd
CREATE USER 'mysql_exporter'@'%' IDENTIFIED BY 'testpasswd123' WITH MAX_USER_CONNECTIONS 3; GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysql_exporter'@'%';

# MySQL 8.0 添加监控用户
mysql -h127.0.0.1 -P3307 -uroot -proot123passwd
CREATE USER 'mysql_exporter'@'%' IDENTIFIED BY 'testpasswd123' WITH MAX_USER_CONNECTIONS 3; GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysql_exporter'@'%';

mysql_exporter 配置

GitHub 下载对应版本:

# 下载
cd /tmp
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.16.0/mysqld_exporter-0.16.0.linux-amd64.tar.gz
tar xf tar xf mysqld_exporter-0.16.0.linux-amd64.tar.gz
cd /tmp/mysqld_exporter-0.16.0.linux-amd64
mv mysqld_exporter /usr/local/bin/

# 创建配置文件
# vim /var/lib/.my.cnf
[client]
user=mysql_exporter
password=testpasswd123

# 使用 systemd 管理 mysql_exporter
# 配置单元文件
# vim /etc/systemd/system/mysqld_exporter.service
[Unit]
Description=Prometheus Mysqld Exporter
After=network.target

[Service]
Type=simple
User=root
Group=root
Nice=-5
ExecStart=/usr/local/bin/mysqld_exporter \
    --config.my-cnf=/var/lib/.my.cnf \
    --web.listen-address=0.0.0.0:9104

SyslogIdentifier=mysqld_exporter
Restart=always

# 启动和开机自启
systemctl start mysqld_exporter.service
systemctl enable mysqld_exporter.service
systemctl status mysqld_exporter.service

Prometheus配置

一般情况下,job 中建议使用 file_sd_configs 而不是 static_configs 维护多实例的 target,这样可以使得配置文件结构更清晰,且便于管理。

# 添加 job
# vim /etc/prometheus/prometheus.yml
- job_name: 'mysqld_exporter'
  file_sd_configs:
    - files:
      - '/etc/prometheus/file_sd/mysql.yml'
  relabel_configs:
    - source_labels: [__address__]
      target_label: __param_target
    - source_labels: [__param_target]
      target_label: instance
    - target_label: __address__
      replacement: 127.0.0.1:9104

# 维护对应的子配置文件以实现自动发现
# vim /etc/prometheus/file_sd/mysql.yml
- labels:
    instance_name: "test-mysql-5.7"
  targets:
  - 192.168.2.11:3307

- labels:
    instance_name: "test-mysql-8.0"
  targets:
  - 192.168.2.11:3308

# 重载 Prometheus
systemctl reload prometheus.service

查看 Prometheus web端的 target 抓取情况:

使用 MySQL Exporter 监控MySQL

亦能看到指标已经被成功收集:
使用 MySQL Exporter 监控MySQL

Grafana 展示

面板 json 有需要可自取:open.opshub.cn/wordpress/grafana-mysql.json

使用 MySQL Exporter 监控MySQL

本文属于专题:Prometheus Exporter

引用链接

正文完
 
pengyinwei
版权声明:本站原创文章,由 pengyinwei 2024-12-31发表,共计2829字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处:https://www.opshub.cn
评论(没有评论)